package controlador;

import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Vector;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import modelo.Ingrediente;
import modelo.Producto;
import modelo.DetalleProducto;
import modelo.Sentencias;
import vista.VistaProducto;


public class ControladorProducto implements ActionListener{
	public VistaProducto vProducto;
	public Producto producto;
	public  static Vector<DetalleProducto> detalles;
	Sentencias MyConex = new Sentencias();

	public ControladorProducto(VistaProducto vp){
		vProducto=vp;
		detalles=new Vector<DetalleProducto>(); 
	}

		
		public void actionPerformed(ActionEvent ae) {
			if(ae.getSource()== vProducto.btnSalir)
			{
				int opcion = JOptionPane.showConfirmDialog(new JFrame(),"Desea volver al menu anterior?",
						     "Mensaje de Confirmacion",JOptionPane.YES_NO_OPTION,
						     JOptionPane.QUESTION_MESSAGE);
				if (opcion == JOptionPane.YES_OPTION)
					vProducto.dispose();
			}
			if(ae.getSource()== vProducto.btnRegistrar){
				if(validarCampos()){
					if(detalles.size()==0)
						JOptionPane.showMessageDialog(new JFrame(), 
								"El producto debe poseeer por lo menos 1 ingrediente","Producto", 
								JOptionPane.INFORMATION_MESSAGE);
					else{
				String nombreCategoria,codCategoria;
				MyConex = new Sentencias();
				nombreCategoria=vProducto.jcbCategorias.getSelectedItem().toString();
				codCategoria=MyConex.ObtenerCodCategoria(nombreCategoria);
				producto = new Producto(codCategoria,vProducto.txtCodProducto.getText(),vProducto.txtDescripcion.getText(), vProducto.txtFechaReg.getText(),Float.parseFloat(vProducto.txtPrecio.getText()));
				MyConex.insetarDatosProducto(producto);
				MyConex.InsertarIngredientesProducto(detalles);
				detalles.clear();
				limpiarCampos();
				JOptionPane.showMessageDialog(new JFrame(), 
						"el producto ha sido registrado con exito","Producto", 
						JOptionPane.INFORMATION_MESSAGE);
					}
				}
				else
					JOptionPane.showMessageDialog(new JFrame(), 
							"Por favor introduzca todos los datos del producto","Producto", 
							JOptionPane.INFORMATION_MESSAGE);
			}
			if(ae.getSource()== vProducto.btnAgregar){
		
			   MyConex = new Sentencias();
				float cant,precio=0;
				DetalleProducto detalle;
				String codProducto,cantidad;
				cantidad=vProducto.txtCantidad.getText();
				if(cantidad.equals(""))
					JOptionPane.showMessageDialog(new JFrame(), 
							"Seleccione la cantidad de ingrediente","Producto", 
							JOptionPane.INFORMATION_MESSAGE);
				else
				{
				String nombreIngrediente,codIng;
				float totalActual=Float.parseFloat(vProducto.txtPrecio.getText());
				cant=Float.parseFloat(vProducto.txtCantidad.getText());
				codProducto=vProducto.txtCodProducto.getText();
				nombreIngrediente=vProducto.jcbIngredientes.getSelectedItem().toString();
				codIng=MyConex.ObtenerCodIngrediente(nombreIngrediente);
				Ingrediente ingrediente=MyConex.obtenerIngrediente(codIng);
				precio=precio+(ingrediente.getPrecio()*cant);
				vProducto.txtPrecio.setText(String.valueOf(precio+totalActual));
				detalle=new DetalleProducto(cant,codIng,codProducto);
				detalles.add(detalle);
				vProducto.tablaModel.setRowCount(detalles.size());
				vProducto.tablaModel.setValueAt(vProducto.jcbIngredientes.getSelectedItem().toString(),vProducto.tablaModel.getRowCount()-1,0);
				vProducto.tablaModel.setValueAt(nombreIngrediente,vProducto.tablaModel.getRowCount()-1,1);
				vProducto.tablaModel.setValueAt(cant,vProducto.tablaModel.getRowCount()-1,2);
				vProducto.tablaIngredientes.setShowGrid(true);
				vProducto.tablaIngredientes.setShowHorizontalLines(true);
				vProducto.tablaIngredientes.setPreferredScrollableViewportSize(new Dimension(50,25));
				}
				
			}
			if(ae.getSource()== vProducto.btnRemover){
				
				int indice=vProducto.tablaIngredientes.getSelectedRow();
				if(indice>=0){
				MyConex = new Sentencias();
				float totalActual=Float.parseFloat(vProducto.txtPrecio.getText());
				vProducto.tablaModel.removeRow(indice);
			//	vProducto.listaIngredientes.repaint();
				DetalleProducto detalle=detalles.remove(indice);
				Ingrediente ingrediente=MyConex.obtenerIngrediente(detalle.getCodIngrediente());
				float total=ingrediente.getPrecio()*detalle.getCantidad();
				vProducto.txtPrecio.setText(String.valueOf(totalActual-total));
				}
				else
					JOptionPane.showMessageDialog(new JFrame(), 
							"Por favor seleccione el ingrediente que desea remover","Producto", 
							JOptionPane.INFORMATION_MESSAGE);
				
			}
			if(ae.getSource()== vProducto.btnBuscar){
				 String codProducto=vProducto.txtCodProducto.getText();
				 if(codProducto.equals(""))
					 JOptionPane.showMessageDialog(new JFrame(), 
								"Por favor introduzca el codigo del producto","Producto", 
								JOptionPane.INFORMATION_MESSAGE);
				 MyConex = new Sentencias();
					Producto producto=MyConex.obtenerProducto(codProducto);
					if(producto==null){
						JOptionPane.showMessageDialog(new JFrame(), 
								"El producto no se encuntra registrado","Producto", 
								JOptionPane.INFORMATION_MESSAGE);
					noEncontrado();}
					else{
						vProducto.txtDescripcion.setText(producto.getDescripcion());
						vProducto.txtFechaReg.setText(producto.getFechaRegistro());
						vProducto.txtPrecio.setText(String.valueOf(producto.getPrecio()));
						encontrado();
					}	
			}
			if(ae.getSource()== vProducto.btnModificar){
				if(validarCampos()){
				String nombreCategoria,codCategoria;
				nombreCategoria=vProducto.jcbCategorias.getSelectedItem().toString();
				codCategoria=MyConex.ObtenerCodCategoria(nombreCategoria);
				producto = new Producto(codCategoria,vProducto.txtCodProducto.getText(),vProducto.txtDescripcion.getText(), vProducto.txtFechaReg.getText(),Float.parseFloat(vProducto.txtPrecio.getText()));
				MyConex = new Sentencias();
				MyConex.modificarProducto(vProducto.txtCodProducto.getText(),producto);
				JOptionPane.showMessageDialog(new JFrame(), 
						"Los datos del producto han sido modificado","Producto", 
						JOptionPane.INFORMATION_MESSAGE);
				}
				else
					JOptionPane.showMessageDialog(new JFrame(), 
							"Por favor introduzca todos los datos del producto","Producto", 
							JOptionPane.INFORMATION_MESSAGE);
			}
		}
		public boolean validarCampos(){
			boolean validar=true;
			if(vProducto.txtDescripcion.getText().equals("") || vProducto.txtFechaReg.getText().equals(""))
				validar=false;
			return validar;
		}
		public void limpiarCampos(){
			vProducto.txtCantidad.setText("");
			vProducto.txtCodProducto.setText("");
			vProducto.txtDescripcion.setText("");
			vProducto.txtFechaReg.setText("");
			vProducto.txtPrecio.setText("0");
			vProducto.tablaIngredientes.removeColumnSelectionInterval(0,vProducto.tablaIngredientes.getRowCount());
			vProducto.txtCodProducto.requestFocus(true);
			desActivar();
				}
		public void encontrado(){
			vProducto.txtCodProducto.setEditable(false);
			vProducto.btnRemover.setEnabled(true);
			vProducto.txtCantidad.setEditable(true);
			vProducto.txtDescripcion.setEditable(true);
			vProducto.txtFechaReg.setEditable(true);
			vProducto.jcbCategorias.setEnabled(true);
			vProducto.jcbIngredientes.setEnabled(true);
			vProducto.btnModificar.setEnabled(true);
			vProducto.btnAgregar.setEnabled(true);
			vProducto.btnLimpiar.setEnabled(true);
			vProducto.btnRegistrar.setEnabled(false);
		}
		public void noEncontrado(){
			vProducto.btnRegistrar.setEnabled(true);
			vProducto.btnAgregar.setEnabled(true);
			vProducto.btnRemover.setEnabled(true);
			vProducto.txtCantidad.setEditable(true);
			vProducto.txtDescripcion.setEditable(true);
			vProducto.txtFechaReg.setEditable(true);
			vProducto.jcbCategorias.setEnabled(true);
			vProducto.jcbIngredientes.setEnabled(true);
			vProducto.btnLimpiar.setEnabled(true);
			vProducto.txtCodProducto.setEditable(false);
		}
		public void desActivar(){
			vProducto.btnRegistrar.setEnabled(false);
			vProducto.txtCantidad.setEditable(false);
			vProducto.txtDescripcion.setEditable(false);
			vProducto.txtFechaReg.setEditable(false);
			vProducto.btnLimpiar.setEnabled(false);
			vProducto.txtCodProducto.setEditable(true);	
			
		}
		public void inicio(){
			vProducto.btnRegistrar.setEnabled(false);
			vProducto.btnAgregar.setEnabled(false);
			vProducto.btnLimpiar.setEnabled(false);
			vProducto.btnModificar.setEnabled(false);
		    limpiarCampos();
			
		}
		
}
